在 Rust 世界中,一个强大的命令行工具不仅仅是一个脚本;它是一套精心设计的 项目蓝图。要构建像 grep这样的工具,我们需要将工作划分为一个 二进制库 和一个 库库。
1. 咖啡机类比
想象一台高端咖啡机。其中 lib.rs 包含了加热和研磨咖啡豆的内部机制——即“引擎逻辑”。而 main.rs 则是用户按下的外部按钮——即“接口”。通过将两者分离,技术人员可以在不每次都按下物理按钮(二进制)的情况下测试加热器(库)的功能。
2. 搭建引擎结构
我们从 $ cargo new minigrep开始。虽然这会创建一个 main.rs,但我们必须手动添加 src/lib.rs。这种架构上的分离确保了我们的核心搜索逻辑保持 解耦 与命令行解析分离,从而实现更易测试和模块化的设计。
3. 可测试的模块化
通过将逻辑移至 lib.rs,我们可以利用 Rust 的测试框架在受控环境中调用库函数。我们在二进制文件中使用 use minigrep; 来导入引擎,同时将命令行解析逻辑保持独立。
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>